Docset は以下のようなディレクトリ構造になってます。

.docset/
├── Contents
│   ├── Resources
│   │   ├── Documents
│   │   └── docSet.dsidx
│   └── info.plist
├── icon.png
└── icon@2x.png

この中で重要なのが

  1. Documents

  2. docSet.dsidx

  3. info.plist

です。

Documents

この中にはHTMLファイルを格納します。Dash ではドキュメント(HTML)を開くと時に単にDocuments/からのパスで開こうとします。

HTMLファイルであれば何でもいいので静的サイトジェネレーターの選定は自由です。

docSet.dsidx

索引する為のデータです。例えば「typescript: interfaces」と検索した時に「Interfaces」が出てくるのは、このファイルに「Interfaces の時はこのタイプでこの HTML ファイルね」と登録されている為です。これは Sqlite3 ファイルで作ります。

Sqlite3 へはsqlite3 docSet.dsidxのように入り、

CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT, type TEXT, path TEXT);
CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);

でテーブルを作った後、

INSERT OR IGNORE INTO searchIndex(name, type, path) VALUES ('Interfaces', 'Guide', '/interfaces.html');

のような感じでデータを入れていきます。基本的はここはスクリプトを組んで実行する部分だと思います。

info.plist

Dash でのメタ情報を設定します。例えばtypescript:入力した時に、TypeScript Docset だけの検索モードになるのは、このファイルに「typescriptをキーワードとして使ってね」のように記述されてる為です。

基本的にこれは以下の[nN]ameを自分の環境に合わせて書き換えるだけでいいと思います。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleIdentifier</key>
	<string>name</string>
	<key>CFBundleName</key>
	<string>Name</string>
	<key>DocSetPlatformFamily</key>
	<string>name</string>
	<key>isDashDocset</key>
	<true/>
	<key>isJavaScriptEnabled</key>
  <true/>
</dict>
</plist>

アイコン

オプショナルですが<name>.docset直下にicon.pngicon@2x.pngを置くとキーワードを入力した時にアイコンが付いて分かりやすくなります。

icon.png16x16icon@2x.png32x32のサイズでそれぞれ作成します。

作った Docset を登録

Preferences > Docsets > + > Add Local Docset をクリックするとファインダーが開きます。ここで先程の<name>.docsetを開けば登録されるはずです!

も参照してください。

JavaScript で飯食べたい歴約 5 年、 純( nju33 ) によるノートサイトです。

このサイトではドリンク代や奨学金返済の為、広告などを貼らせて頂いてますがご了承ください。

Change Log